package cn.itcast.nems.journal.service;

import cn.itcast.ic.common.bean.Page;
import cn.itcast.nems.journal.dto.JournalDropoutCreateDTO;
import cn.itcast.nems.order.dto.JournalDropoutDTO;
import cn.itcast.nems.studentrecord.dao.condition.JournalDropoutParams;
import cn.itcast.nems.studentrecord.dao.dataobject.JournalDropoutDO;
import cn.itcast.nems.studentrecord.dao.entity.JournalDropout;
import cn.itcast.nems.studentrecord.dto.SettlementResultDTO;
import com.baomidou.mybatisplus.extension.service.IService;

import java.time.LocalDate;
import java.util.Map;

/**
 * <p>
 * 退学凭单-头 服务类
 * </p>
 *
 * @author 陈早庆
 * @since 2023-12-07
 */
public interface JournalDropoutService extends IService<JournalDropout> {

    void testFinishRefund(String formId ) ;

    Page<JournalDropoutDO> listPage(Integer pageNumber, Integer pageSize, JournalDropoutParams params);

    JournalDropout getById(String id);

    JournalDropoutDO getJournalDropoutById(String id);

    @Deprecated
    String create(JournalDropoutDTO params);

    /**
     * 
     * 功能描述：创建退学凭单（方法重构）
     *
     * @param params
     * @return
     * 
     * @author 刘曙
     *
     * @since 2024年3月25日
     *
     * @update:[变更日期YYYY-MM-DD][更改人姓名][变更描述]
     */
    String create(JournalDropoutCreateDTO params);
    
    Boolean delete(String id);

    Boolean update(JournalDropoutDTO params);

    /**
     * 退学结算获取以下金额：
     * 应交金额
     * 应服务天数
     * 实际服务天数
     * 课耗金额
     * 已交金额
     * 剩余金额
     *
     * @param studentRecordId 学籍id
     * @param settlementDate 出班结算日期
     * @return
     */
    SettlementResultDTO settlementCalculatorRefund(String studentRecordId, LocalDate settlementDate, String type);

    /**
     * 提交
     *
     * @param id 升级凭单ID
     * @return 是否成功
     **/
    Boolean flow(String id);

    /**
     * 检查是否已退学
     * @param studentRecordId
     * @param clazzId
     * @return
     */
    Boolean exists(String id, String studentRecordId, Integer clazzId);


    /**
     * 退学分页班级筛选下拉（我提交的、待我审批、全部凭单）
     * @param pageNumber
     * @param pageSize
     * @param params
     * @return
     */
    Page<Map> searchClazzes(Integer pageNumber, Integer pageSize, JournalDropoutParams params);

    /**
     * <p>
     * 根据学籍查询退费凭单
     * </p>
     *
     * @param studentRecordId 学籍ID
     * @author zhouwei
     * @since 2024/3/18 1:57 PM
     **/
    JournalDropout queryByStudentRecordId(String studentRecordId );
}
